package com.woniu.service.impl;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.woniu.entity.Transaction;
import com.woniu.mapper.TransactionMapper;
import com.woniu.service.TransactionService;
import com.woniu.vo.TransactionVO;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

@Service
/**
 * TransactionServiceImpl类实现了TransactionService接口，提供交易相关服务。
 * 它继承了ServiceImpl类，用于简化数据访问层的实现，并专注于业务逻辑处理。
 */
public class TransactionServiceImpl extends ServiceImpl<TransactionMapper, Transaction>
    implements TransactionService {

    @Resource
    /**
     * transactionMapper用于与数据库交互，执行与Transaction实体相关的SQL语句。
     */
    private TransactionMapper transactionMapper;

    @Override
    /**
     * 获取交易列表，根据关键词、页码和页面大小进行筛选。
     *
     * @param keyword 搜索交易的关键字，可为空。
     * @param pageNum 页码，用于分页查询。
     * @param pageSize 每页的交易数量。
     * @return 返回一个交易VO列表。
     */
    public List<TransactionVO> getTransactionList(String keyword, Integer pageNum, Integer pageSize) {
        Page<TransactionVO> page = new Page<>(pageNum, pageSize);
        List<TransactionVO> transactions;

        if (keyword != null && !keyword.trim().isEmpty()) {
            transactions = transactionMapper.queryTransactionByKeyword(keyword, page);
        } else {
            transactions = transactionMapper.queryTransactionList(page);
        }

        return transactions;
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    /**
     * 添加交易记录。
     *
     * @param transaction 要添加的交易对象。
     * @return 如果插入成功，返回true；否则返回false。
     */
    public boolean addTransaction(Transaction transaction) {
        return transactionMapper.insert(transaction) > 0;
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    /**
     * 删除交易记录。
     *
     * @param id 要删除的交易记录的ID。
     * @return 如果删除成功，返回true；否则返回false。
     */
    public boolean deleteTransaction(Long id) {
        return transactionMapper.deleteById(id) > 0;
    }
}
